文章大纲
1. 排列组合
1.1. 加法法则和乘法法则
设 A A A, B B B是两个无关的性质,具有性质 A A A的事件有 m m m个,具有性质 B B B的事件有 n n n个
法则 | 事件数 | 分析 |
---|---|---|
加法法则:具有性质 A A A或性质 B B B的事件 | m + n m+n m+n | 这里或的意思是两个性质任选其一, m + n = ( m + 0 ) + ( 0 + n ) m+n=(m+0)+(0+n) m+n=(m+0)+(0+n) |
乘法法则:具有性质 A A A和性质 B B B的事件 | m × n m\times n m×n | 这里和的意思是两个性质兼而有之, m m m和 n n n组合的情况即为 m × n m\times n m×n |
1.2. 排列和组合
从 n n n个元素中选取 m m m个元素,求其方案数
元素是否有序 | 方案数 | 计算过程 |
---|---|---|
排列:有序 | A n m A_n^m Anm | n ( n − 1 ) ⋯ ( n − m + 1 ) = n ! ( n − m ) ! n(n-1)\cdots(n-m+1)=\displaystyle\frac{n!}{(n-m)!} n(n−1)⋯(n−m+1)=(n−m)!n! |
组合:无序 | C n m C_n^m Cnm | n ( n − 1 ) ⋯ ( n − m + 1 ) m ! = n ! m ! ( n − m ) ! \displaystyle\frac{n(n-1)\cdots(n-m+1)}{m!}=\frac{n!}{m!(n-m)!} m!n(n−1)⋯(n−m+1)=m!(n−m)!n! |
1.3. 扩展问题
1.3.1. 圆周排列
从 n n n个元素中选取 m m m个元素有序排列在圆周上,其方案数为 A n m m \displaystyle\frac{A_n^m}{m} mAnm。例如 a a a, b b b, c c c, d d d这4个元素,在直线上的排列 a b c d abcd abcd, d a b c dabc dabc, c d a b cdab cdab, b c d a bcda bcda是不同的,但是在圆周上则是相同的,且选出几个元素就会重复几次,所以只需要将直线上排列数除以 m m m即可。
1.3.2. 允许重复的组合
一般的组合是从
n
n
n个元素中选取
m
m
m个元素,不允许重复选择同一个元素,组合数为
C
n
m
C_n^m
Cnm。而如果允许重复的选择同一个元素,则组合数为
C
n
+
m
−
1
m
C_{n+m-1}^m
Cn+m−1m。
可以这样思考,允许重复选择相当于在
n
n
n个元素中多加了
m
−
1
m-1
m−1个“哑元素”,一旦选中了一个“哑元素”,意味着在
n
n
n个元素中只能选
m
−
1
m-1
m−1个不同元素,也就对应着已经选中的
m
−
1
m-1
m−1个元素中的某一个需要重复一次。这样的“哑元素”最多只能选
m
−
1
m-1
m−1个,因为至少应该选择
n
n
n个元素中的一个,且此时这个元素重复了
m
m
m次。
不允许重复的组合以及允许重复的组合可以等价类比如下表
组合是否允许重复 | 类比球放盒子模型 | 解释 |
---|---|---|
不允许重复 | n n n个不同的球放入 m m m个相同的盒子且每盒1球 | 盒子相同代表无序,直接从
n
n
n个球中选出
m
m
m个 分别放入每个盒子即可,要求 n ≥ m n\ge m n≥m |
允许重复 | m m m个相同的球放入 n n n个不同的盒子(允许空盒) | 增加
n
n
n个假球,如果选中假球则实际上盒子中没有球, 使用隔板法对 m + n m+n m+n个球的 m + n − 1 m+n-1 m+n−1个空插入 n − 1 n-1 n−1个隔板, 将得到 n n n个部分放入盒子 |
问题变形:
- 对于整数 n n n和 m m m,方程 x 1 + x 2 + ⋯ + x n = m x_1+x_2+\cdots+x_n=m x1+x2+⋯+xn=m的非负整数解的个数为 C n + m − 1 m C_{n+m-1}^m Cn+m−1m。
- 式子 ( x 1 + x 2 + ⋯ + x n ) m (x_1+x_2+\cdots+x_n)^m (x1+x2+⋯+xn)m的展开式项数为 C n + m − 1 m C_{n+m-1}^m Cn+m−1m。
1.3.3. 不相邻的组合
从
n
n
n个元素中选取
m
m
m个元素,要求这
m
m
m个元素在原来的位置上均互不相邻,则组合数为
C
n
−
m
+
1
m
C_{n-m+1}^{m}
Cn−m+1m。
可以考虑
n
n
n个球之间一共可以插入
n
−
1
n-1
n−1个隔板,且隔板都是相同的。现在假设已经选出了互不相邻的
m
m
m个元素,那么如果把这
m
m
m个元素放回到原来的位置上,为了保证互不相邻,这
m
m
m个元素两两之间至少应该有两个隔板,所以先将
n
−
1
n-1
n−1个隔板分配
2
(
m
−
1
)
2(m-1)
2(m−1)个到
m
m
m个元素两两之间,剩下的
n
−
2
m
+
1
n-2m+1
n−2m+1个隔板就可以在
m
m
m个元素之间及两边随意插入,一共
m
+
1
m+1
m+1个位置。此时问题转化为将
n
−
2
m
+
1
n-2m+1
n−2m+1个相同隔板放在
m
+
1
m+1
m+1个不同位置上的组合数。这可以由“球放盒子”模型直接求解,即
C
(
n
−
2
m
+
1
)
+
(
m
+
1
)
−
1
(
m
+
1
)
−
1
=
C
n
−
m
+
1
m
C_{(n-2m+1)+(m+1)-1}^{(m+1)-1}=C_{n-m+1}^{m}
C(n−2m+1)+(m+1)−1(m+1)−1=Cn−m+1m。
2. 递推关系
2.1. 汉诺塔问题
有三根杆子A,B,C。A杆上有 n n n个( n n n>1)穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至C杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。问至少需要几次移动才能完成。
可以使用递归的思想,设 H ( n ) H(n) H(n)表示 n n n个圆盘所需要的移动次数,那么移动过程是先将前 n − 1 n-1 n−1个圆盘移动到B上,接着将第 n n n个圆盘移动到C,最后还要把B上的 n − 1 n-1 n−1个圆盘移动到C。所以递推公式为 H ( n ) = 2 H ( n − 1 ) + 1 H(n)=2H(n-1)+1 H(n)=2H(n−1)+1,且 H ( 1 ) = 1 H(1)=1 H(1)=1。可以根据母函数或者数学归纳法得到 H ( n ) = 2 n − 1 H(n)=2^n-1 H(n)=2n−1。
2.2. Fibonacci序列
雌雄一对兔子,出生两个月后能就能繁殖雌雄一对小兔,问 n n n个月后有多少对兔子。
递推公式为 F ( n ) = F ( n − 1 ) + F ( n − 2 ) F(n)=F(n-1)+F(n-2) F(n)=F(n−1)+F(n−2),且 F ( 1 ) = F ( 2 ) = 1 F(1)=F(2)=1 F(1)=F(2)=1。可以根据母函数法得到 F ( n ) = α n − β n 5 F(n)=\displaystyle\frac{\alpha^n-\beta^n}{\sqrt{5}} F(n)=5αn−βn且 α = 1 + 5 2 \alpha=\displaystyle\frac{1+\sqrt{5}}{2} α=21+5和 β = 1 − 5 2 \beta=\displaystyle\frac{1-\sqrt{5}}{2} β=21−5。
3. 非线性递推序列
3.1. Stirling数
定义第二类Stirling数为将 n n n个不同的球放入 m m m个相同的盒子,且不允许空盒的方案数,用 S ( n , m ) S(n,m) S(n,m)表示。其递推式为 S ( n , m ) = S ( n − 1 , m − 1 ) + m S ( n − 1 , m ) S(n,m)=S(n-1,m-1)+mS(n-1,m) S(n,m)=S(n−1,m−1)+mS(n−1,m),且 S ( 0 , ⋅ ) = S ( ⋅ , 0 ) = 0 S(0,\cdot)=S(\cdot,0)=0 S(0,⋅)=S(⋅,0)=0, S ( k , 1 ) = S ( k , k ) = 1 S(k,1)=S(k,k)=1 S(k,1)=S(k,k)=1对所有 k ≥ 1 k\ge 1 k≥1。Stirling数的每一项可以用下面的三角形计算,按照递推式开看,第几行就有几个数,且每一项都是上一行相同位置的数乘以位置序号,加上上一行前一位置的数。
3.2. 球盒模型
按照球是否相同,盒是否相同,是否允许空盒,一共可以分为8种情况。
n n n个球 | m m m个盒 | 有无空盒 | 方案数 |
---|---|---|---|
不同 | 不同 | 有空盒 | m n m^n mn,每个球都可在 m m m个盒中选择, n n n个球使用乘法法则 |
不同 | 不同 | 无空盒 | m ! S ( n , m ) m!S(n,m) m!S(n,m),如果盒相同则为 S ( n , m ) S(n,m) S(n,m),再将 m m m个盒全排列 |
不同 | 相同 | 有空盒 | 当
n
≥
m
n\ge m
n≥m为
S
(
n
,
1
)
+
⋯
+
S
(
n
,
m
)
S(n,1)+\cdots+S(n,m)
S(n,1)+⋯+S(n,m), 当 n ≤ m n\le m n≤m为 S ( n , 1 ) + ⋯ + S ( n , n ) S(n,1)+\cdots+S(n,n) S(n,1)+⋯+S(n,n), 每一项表示 m − 1 m-1 m−1个空盒, ⋯ \cdots ⋯, 0 0 0个空盒 |
不同 | 相同 | 无空盒 | S ( n , m ) S(n,m) S(n,m),Stirling数的定义 |
相同 | 不同 | 有空盒 |
C
n
+
m
−
1
m
−
1
C_{n+m-1}^{m-1}
Cn+m−1m−1,增加
m
m
m个假球,如果选中假球则实际上盒子中没有球, 使用隔板法对 m + n m+n m+n个球的 m + n − 1 m+n-1 m+n−1个空插入 m − 1 m-1 m−1个隔板, 将得到 m m m个部分放入盒子 |
相同 | 不同 | 无空盒 |
C
n
−
1
m
−
1
C_{n-1}^{m-1}
Cn−1m−1,使用隔板法对
n
n
n个球的
n
−
1
n-1
n−1个空插入
m
−
1
m-1
m−1个隔板, 将得到 m m m个部分放入盒子 |
相同 | 相同 | 有空盒 | 穷取法,相当于将
n
n
n用
0
,
1
,
⋯
 
,
m
0,1,\cdots,m
0,1,⋯,m进行分解的方案数, 且分解的数字没有顺序 |
相同 | 相同 | 无空盒 | 穷取法,相当于将
n
−
m
n-m
n−m用
0
,
1
,
⋯
 
,
m
0,1,\cdots,m
0,1,⋯,m进行分解的方案数, 且分解的数字没有顺序 |
3.3. Catalan数
Catalan数定义为给定 2 n 2n 2n个数由 n n n个 0 0 0和 n n n个 1 1 1组成,要求这样的排列方案数,使得排列的任意前 k k k个数中的 1 1 1的个数总是不少于 0 0 0的个数。可以求得这样的排列方案数 C a t a l a n ( 2 n ) = 1 n + 1 C 2 n n = C 2 n n − C 2 n n − 1 Catalan(2n)=\displaystyle\frac{1}{n+1}C_{2n}^n=C_{2n}^n-C_{2n}^{n-1} Catalan(2n)=n+11C2nn=C2nn−C2nn−1。
关于Catalan数有极其多的变形问题,参见维基百科卡塔兰数,其一个巧妙的证明方法参见折现法——卡特兰数证明。
4. 容斥原理
4.1. De morgan定理
- A ∪ B ‾ = A ‾ ∩ B ‾ \overline{A\cup B}=\overline{A}\cap\overline{B} A∪B=A∩B
- A ∩ B ‾ = A ‾ ∪ B ‾ \overline{A\cap B}=\overline{A}\cup\overline{B} A∩B=A∪B
4.2. 容斥原理
- ∣ A ∪ B ∣ = ∣ A ∣ + ∣ B ∣ − ∣ A ∩ B ∣ |A\cup B|=|A|+|B|-|A\cap B| ∣A∪B∣=∣A∣+∣B∣−∣A∩B∣
- ∣ A ∪ B ∪ C ∣ = ∣ A ∣ + ∣ B ∣ + ∣ C ∣ − ∣ A ∩ B ∣ − ∣ A ∩ C ∣ − ∣ B ∩ C ∣ + ∣ A ∩ B ∩ C ∣ |A\cup B\cup C|=|A|+|B|+|C|-|A\cap B|-|A\cap C|-|B\cap C|+|A\cap B\cap C| ∣A∪B∪C∣=∣A∣+∣B∣+∣C∣−∣A∩B∣−∣A∩C∣−∣B∩C∣+∣A∩B∩C∣
4.3. 广义容斥原理
- ∣ A ∩ B ‾ ∣ = ∣ A ∣ − ∣ A ∩ B ∣ |A\cap \overline{B}|=|A|-|A\cap B| ∣A∩B∣=∣A∣−∣A∩B∣
- ∣ A ∩ B ∩ C ‾ ∣ = ∣ A ∩ B ∣ − ∣ A ∩ B ∩ C ∣ |A\cap B\cap \overline{C}|=|A\cap B|-|A\cap B\cap C| ∣A∩B∩C∣=∣A∩B∣−∣A∩B∩C∣
- ∣ A ∩ B ‾ ∩ C ‾ ∣ = ∣ A ∣ − ∣ A ∩ B ∣ − ∣ A ∩ C ∣ + ∣ A ∩ B ∩ C ∣ |A\cap \overline{B}\cap \overline{C}|=|A|-|A\cap B|-|A\cap C|+|A\cap B\cap C| ∣A∩B∩C∣=∣A∣−∣A∩B∣−∣A∩C∣+∣A∩B∩C∣
- ∣ A ∩ B ‾ ∩ C ‾ ∩ D ‾ ∣ = ∣ A ∣ − ∣ A ∩ B ∣ − ∣ A ∩ C ∣ − ∣ A ∩ D ∣ + ∣ A ∩ B ∩ C ∣ + ∣ A ∩ B ∩ D ∣ + ∣ A ∩ C ∩ D ∣ − ∣ A ∩ B ∩ C ∩ D ∣ |A\cap \overline{B}\cap \overline{C}\cap \overline{D}|=|A|-|A\cap B|-|A\cap C|-|A\cap D|+|A\cap B\cap C|+|A\cap B\cap D|+|A\cap C\cap D|-|A\cap B\cap C\cap D| ∣A∩B∩C∩D∣=∣A∣−∣A∩B∣−∣A∩C∣−∣A∩D∣+∣A∩B∩C∣+∣A∩B∩D∣+∣A∩C∩D∣−∣A∩B∩C∩D∣
4.4. 计算举例
4.4.1. 欧拉函数问题,求不超过120的素数个数
因为
1
1
2
=
121
>
120
11^2=121>120
112=121>120,所以不超过120的合数一定是2,3,5,7的倍数。分别令
A
2
A_2
A2,
A
3
A_3
A3,
A
5
A_5
A5,
A
7
A_7
A7为小于120且是2,3,5,7的倍数,则不超过120的素数个数就是
∣
A
‾
2
∩
A
‾
3
∩
A
‾
5
∩
A
‾
7
∣
|\overline{A}_2\cap\overline{A}_3\cap\overline{A}_5\cap\overline{A}_7|
∣A2∩A3∩A5∩A7∣。
∣
A
‾
2
∩
A
‾
3
∩
A
‾
5
∩
A
‾
7
∣
=
120
−
∣
A
2
∪
A
3
∪
A
5
∪
A
7
∣
=
120
−
(
∣
A
2
∣
+
∣
A
3
∣
+
∣
A
5
∣
+
∣
A
7
∣
)
+
(
∣
A
2
∩
A
3
∣
+
∣
A
2
∩
A
5
∣
+
∣
A
2
∩
A
7
∣
+
∣
A
3
∩
A
5
∣
+
∣
A
3
∩
A
7
∣
+
∣
A
5
∩
A
7
∣
)
−
(
∣
A
2
∩
A
3
∩
A
5
∣
+
∣
A
2
∩
A
3
∩
A
7
∣
+
∣
A
2
∩
A
5
∩
A
7
∣
+
∣
A
3
∩
A
5
∩
A
7
∣
)
+
∣
A
2
∩
A
3
∩
A
5
∩
A
7
∣
\begin{array}{ccl} |\overline{A}_2\cap\overline{A}_3\cap\overline{A}_5\cap\overline{A}_7|&=&120-|A_2\cup A_3\cup A_5\cup A_7|\\ &=&120-(|A_2|+|A_3|+|A_5|+|A_7|)\\ &&+(|A_2\cap A_3|+|A_2\cap A_5|+|A_2\cap A_7|+|A_3\cap A_5|+|A_3\cap A_7|+|A_5\cap A_7|)\\ &&-(|A_2\cap A_3\cap A_5|+|A_2\cap A_3\cap A_7|+|A_2\cap A_5\cap A_7|+|A_3\cap A_5\cap A_7|)\\ &&+|A_2\cap A_3\cap A_5\cap A_7| \end{array}
∣A2∩A3∩A5∩A7∣==120−∣A2∪A3∪A5∪A7∣120−(∣A2∣+∣A3∣+∣A5∣+∣A7∣)+(∣A2∩A3∣+∣A2∩A5∣+∣A2∩A7∣+∣A3∩A5∣+∣A3∩A7∣+∣A5∩A7∣)−(∣A2∩A3∩A5∣+∣A2∩A3∩A7∣+∣A2∩A5∩A7∣+∣A3∩A5∩A7∣)+∣A2∩A3∩A5∩A7∣
其中一项
∣
A
2
∣
=
⌊
120
2
⌋
=
60
|A_2|=\lfloor\displaystyle\frac{120}{2}\rfloor=60
∣A2∣=⌊2120⌋=60,
∣
A
3
∣
=
⌊
120
3
⌋
=
40
|A_3|=\lfloor\displaystyle\frac{120}{3}\rfloor=40
∣A3∣=⌊3120⌋=40,
∣
A
5
∣
=
⌊
120
5
⌋
=
24
|A_5|=\lfloor\displaystyle\frac{120}{5}\rfloor=24
∣A5∣=⌊5120⌋=24,
∣
A
7
∣
=
⌊
120
7
⌋
=
17
|A_7|=\lfloor\displaystyle\frac{120}{7}\rfloor=17
∣A7∣=⌊7120⌋=17,两项
∣
A
2
∩
A
3
∣
=
⌊
120
2
×
3
⌋
=
20
|A_2\cap A_3|=\lfloor\displaystyle\frac{120}{2\times 3}\rfloor=20
∣A2∩A3∣=⌊2×3120⌋=20,
∣
A
2
∩
A
5
∣
=
⌊
120
2
×
5
⌋
=
12
|A_2\cap A_5|=\lfloor\displaystyle\frac{120}{2\times 5}\rfloor=12
∣A2∩A5∣=⌊2×5120⌋=12,
∣
A
2
∩
A
7
∣
=
⌊
120
2
×
7
⌋
=
8
|A_2\cap A_7|=\lfloor\displaystyle\frac{120}{2\times 7}\rfloor=8
∣A2∩A7∣=⌊2×7120⌋=8,
∣
A
3
∩
A
5
∣
=
⌊
120
3
×
5
⌋
=
8
|A_3\cap A_5|=\lfloor\displaystyle\frac{120}{3\times 5}\rfloor=8
∣A3∩A5∣=⌊3×5120⌋=8,
∣
A
3
∩
A
7
∣
=
⌊
120
3
×
7
⌋
=
5
|A_3\cap A_7|=\lfloor\displaystyle\frac{120}{3\times 7}\rfloor=5
∣A3∩A7∣=⌊3×7120⌋=5,
∣
A
5
∩
A
7
∣
=
⌊
120
5
×
7
⌋
=
3
|A_5\cap A_7|=\lfloor\displaystyle\frac{120}{5\times 7}\rfloor=3
∣A5∩A7∣=⌊5×7120⌋=3,三项
∣
A
2
∩
A
3
∩
A
5
∣
=
⌊
120
2
×
3
×
5
⌋
=
4
|A_2\cap A_3\cap A_5|=\lfloor\displaystyle\frac{120}{2\times 3\times 5}\rfloor=4
∣A2∩A3∩A5∣=⌊2×3×5120⌋=4,
∣
A
2
∩
A
3
∩
A
7
∣
=
⌊
120
2
×
3
×
7
⌋
=
2
|A_2\cap A_3\cap A_7|=\lfloor\displaystyle\frac{120}{2\times 3\times 7}\rfloor=2
∣A2∩A3∩A7∣=⌊2×3×7120⌋=2,
∣
A
2
∩
A
5
∩
A
7
∣
=
⌊
120
2
×
5
×
7
⌋
=
1
|A_2\cap A_5\cap A_7|=\lfloor\displaystyle\frac{120}{2\times 5\times 7}\rfloor=1
∣A2∩A5∩A7∣=⌊2×5×7120⌋=1,
∣
A
3
∩
A
5
∩
A
7
∣
=
⌊
120
3
×
5
×
7
⌋
=
1
|A_3\cap A_5\cap A_7|=\lfloor\displaystyle\frac{120}{3\times 5\times 7}\rfloor=1
∣A3∩A5∩A7∣=⌊3×5×7120⌋=1,四项
∣
A
2
∩
A
3
∩
A
5
∩
A
7
∣
=
⌊
120
2
×
3
×
5
×
7
⌋
=
0
|A_2\cap A_3\cap A_5\cap A_7|=\lfloor\displaystyle\frac{120}{2\times 3\times 5\times 7}\rfloor=0
∣A2∩A3∩A5∩A7∣=⌊2×3×5×7120⌋=0,因此上式等于
120
−
60
−
40
−
24
−
17
+
20
+
12
+
8
+
8
+
5
+
3
−
4
−
2
−
1
−
1
+
0
=
27
120-60-40-24-17+20+12+8+8+5+3-4-2-1-1+0=27
120−60−40−24−17+20+12+8+8+5+3−4−2−1−1+0=27。
4.4.2. 错排问题,即1,2, ⋯ \cdots ⋯,n的全排列中每个元素都不在各自位置上的排列数
设 A i A_i Ai表示第 i i i个数仍然在自己位置上的排列数,所以只需要考虑其他位置元素的全排列数即可,因此错排列数就是 ∣ A ‾ 1 ∩ A ‾ 2 ∩ ⋯ ∩ A ‾ n ∣ = n ! − ∣ A 1 ∪ A 2 ∪ ⋯ ∪ A n ∣ |\overline{A}_1\cap\overline{A}_2\cap\cdots\cap\overline{A}_n|=n!-|A_1\cup A_2\cup\cdots\cup A_n| ∣A1∩A2∩⋯∩An∣=n!−∣A1∪A2∪⋯∪An∣,而
∣ A i ∣ = ( n − 1 ) ! i = 1 , 2 , ⋯   , n ∣ A i ∩ A j ∣ = ( n − 2 ) ! i ≠ j , i , j = 1 , 2 , ⋯   , n ⋮ ∣ A 1 ∩ A 2 ∩ ⋯ ∩ A n ∣ = ( n − n ) ! \begin{array}{rcll} |A_i|&=&(n-1)!\quad&i=1,2,\cdots,n\\ |A_i\cap A_j|&=&(n-2)!\quad&i\neq j,\ i,j=1,2,\cdots,n\\ &\vdots&&\\ |A_1\cap A_2\cap\cdots\cap A_n|&=&(n-n)!& \end{array} ∣Ai∣∣Ai∩Aj∣∣A1∩A2∩⋯∩An∣==⋮=(n−1)!(n−2)!(n−n)!i=1,2,⋯,ni̸=j, i,j=1,2,⋯,n
所以错排列数等于 n ! − C n 1 ( n − 1 ) ! + C n 2 ( n − 2 ) ! + ⋯ ± C n n ( n − n ) ! = n ! − n ! 1 ! + n ! 2 ! − ⋯ ± n ! n ! n!-C_n^1(n-1)!+C_n^2(n-2)!+\cdots\pm C_n^n(n-n)!=\displaystyle n!-\frac{n!}{1!}+\frac{n!}{2!}-\cdots\pm \frac{n!}{n!} n!−Cn1(n−1)!+Cn2(n−2)!+⋯±Cnn(n−n)!=n!−1!n!+2!n!−⋯±n!n!。